package com.apigen.platform.service;

import com.apigen.platform.dto.TemplateRequest;
import com.apigen.platform.vo.TemplateVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;
import java.util.Map;

/**
 * 模板服务接口
 *
 * @author API Generator Platform
 * @since 2025-09-24
 */
public interface ITemplateService {

    /**
     * 创建模板
     *
     * @param request 模板请求参数
     * @return 模板ID
     */
    Long createTemplate(TemplateRequest request);

    /**
     * 更新模板
     *
     * @param request 模板请求参数
     * @return 更新结果
     */
    Boolean updateTemplate(TemplateRequest request);

    /**
     * 删除模板
     *
     * @param templateIds 模板ID列表
     * @return 删除结果
     */
    Boolean deleteTemplates(List<Long> templateIds);

    /**
     * 获取模板详情
     *
     * @param templateId 模板ID
     * @return 模板详情
     */
    TemplateVO getTemplateDetail(Long templateId);

    /**
     * 分页获取模板列表
     *
     * @param templateType 模板类型
     * @param techStack 技术栈
     * @param tags 标签
     * @param isRecommended 是否推荐
     * @param current 当前页
     * @param size 每页大小
     * @return 分页模板列表
     */
    Page<TemplateVO> getTemplateList(String templateType, String techStack, String tags, 
                                   Boolean isRecommended, Long current, Long size);

    /**
     * 获取推荐模板
     *
     * @param limit 限制数量
     * @return 推荐模板列表
     */
    List<TemplateVO> getRecommendedTemplates(Integer limit);

    /**
     * 获取热门模板
     *
     * @param limit 限制数量
     * @return 热门模板列表
     */
    List<TemplateVO> getPopularTemplates(Integer limit);

    /**
     * 搜索模板
     *
     * @param keyword 关键词
     * @param templateType 模板类型
     * @param current 当前页
     * @param size 每页大小
     * @return 搜索结果
     */
    Page<TemplateVO> searchTemplates(String keyword, String templateType, Long current, Long size);

    /**
     * 增加下载次数
     *
     * @param templateId 模板ID
     * @return 操作结果
     */
    Boolean incrementDownloadCount(Long templateId);

    /**
     * 模板评分
     *
     * @param templateId 模板ID
     * @param rating 评分
     * @param userId 用户ID
     * @return 操作结果
     */
    Boolean rateTemplate(Long templateId, Double rating, Long userId);

    /**
     * 获取模板分类统计
     *
     * @return 分类统计信息
     */
    Map<String, Object> getTemplateTypeStatistics();

    /**
     * 获取模板下载统计
     *
     * @param templateId 模板ID
     * @param days 统计天数
     * @return 下载统计信息
     */
    Map<String, Object> getDownloadStatistics(Long templateId, Integer days);

    /**
     * 克隆模板
     *
     * @param templateId 源模板ID
     * @param newTemplateName 新模板名称
     * @param newTemplateCode 新模板编码
     * @return 新模板ID
     */
    Long cloneTemplate(Long templateId, String newTemplateName, String newTemplateCode);

    /**
     * 导出模板
     *
     * @param templateId 模板ID
     * @return 导出文件路径
     */
    String exportTemplate(Long templateId);

    /**
     * 导入模板
     *
     * @param filePath 模板文件路径
     * @return 导入结果
     */
    Map<String, Object> importTemplate(String filePath);

    /**
     * 验证模板编码唯一性
     *
     * @param templateCode 模板编码
     * @param excludeTemplateId 排除的模板ID
     * @return 是否唯一
     */
    Boolean isTemplateCodeUnique(String templateCode, Long excludeTemplateId);
}










